ubuntu 20.04 supervisor开机自启动ros2 节点 |
您所在的位置:网站首页 › ubuntu supervisor go › ubuntu 20.04 supervisor开机自启动ros2 节点 |
第一种方式 (systemctl)
系统:ubuntu20.04 ros2版本:foxy 第一步:添加服务脚本,如下,添加了[Install]下面两句,使用者为多用户$ sudo vi /etc/systemd/system/rc-local.service [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target 第二步:编写启动脚本上面的ExecStart=/etc/rc.local start 语句会执行在/etc/下面的rc.local文件,但是这个文件在这个目录下面没有,所以新建rc.local文件 sudo touch /etc/rc.local 注意,编写完成之后,记得给文件赋予权限 sudo chmod 777 /etc/rc.local 添加一下内容,注意 #! /bin/bash 的作用位启动一个终端,会以bash形式执行文件。这里会在后台执行/home/jc/test.sh 的业务脚本 #! /bin/bash ## rc.local bash /home/jc/test.sh & 第三步:编写业务脚本根据上面的启动脚本在指定的/home/jc下面编写业务脚本 sudo touch /home/jc/test.sh 内容如下,echo 是我测试用的输出。source 配置环境变量,然后执行launch 文件 #! /bin/bash echo "ni hao" >> /home/jc/jjj export ROS_LOG_DIR=/home/jc/ros2_ws/log source /opt/ros/foxy/setup.sh source /home/jc/ros2_ws/install/setup.bash ros2 launch cpp_pubsub testTalk.launch.py echo "nihao zaici nihao" >> /home/jc/jjj注意,编写完成业务文件后要赋予执行权限 sudo chmod 777 /home/jc/test.sh 第四步:激活服务systemctl enable rc-local.service 第五步:启动服务systemctl start rc-local.service 第六步:重启系统sudo reboot 第七步:检查服务是否运行systemctl status rc-local 我用ros2的talker节点做的测试,效果如下 注意:如果你要查看话题的发布情况,需要转到root用户下才能看到 sudo su 如下图 参考文件:(80条消息) ROS2开机程序自启动_持之以恒2016的博客-CSDN博客 (80条消息) linux+ros2 launch文件开机自启动_Zln4ever的博客-CSDN博客 第二种方式 (supervisor)Supervisor(Supervisor: A Process Control System — Supervisor 4.2.4 documentation)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。 第一步:安装supervisorapt-get install supervisor supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。 第二步:配置使用echo_supervisord_conf生成默认的配置文件 echo_supervisord_conf > /etc/supervisor/supervisord.conf 生成的配置文件如下 supervisord.conf最后的[include]部分配置作用是,将conf.d/下所有.conf结尾的项目作为子进程启动,所以要添加子进程项目,在该目录下添加.conf结尾的项目即可 第三步:添加子进程.conf文件在 /etc/supervisor/conf.d/文件夹下添加.conf文件 touch test.conf 注意要赋予权限 chmod 777 test.conf 内容如下,这里解释一下,program为启动的子进程的名字,之后需要启动子进程时套用。command为需要执行业务的脚本(最好写绝对目录)。stderr和stdout为执行子进程出错时的打印的日志的目录,stdout为执行子进行时正常打印的日志的目录。 还有其他的一些配置,参考:官网 或者其他人(82条消息) 使用 supervisor创建开机自启动进程_蜗牛撵大象的博客-CSDN博客 在command对应的目录下生成业务脚本 touch startnode.sh 赋予权限 chmod 777 startnode.sh 我的业务脚本内容如下 ,注意,source命令在业务脚本里面没有作用,如果你想自动获取有线网络或者无线网络的ip并配置到主从机中,最好将export 写在业务脚本中,不然不起作用。经过验证source .bashrc这个命令在业务脚本中不起作用
2.需要配置环境变量。起初我一位只要source 之前配置号的~/.bashrc文件就可以。但是,任然提示no such file or directory.最后我直接将环境变量配置在业务脚本中,如上 export LD_LIBRARY_PATH=....... 第五步:启动supervisor服务supervisord -c /etc/supervisor/supervisord.conf 第六步:启动子进行 (有问题查看stderr_logfile)supervisorctl start test 也可以执行执行,每次修改子进行文件或业务脚本文件,只要执行reload即可 supervisorctl reload 第七步:开机自启动supeivisor服务7.1配置开机启动项 进入/lib/systemd/system目录,查看是否有supervisor.service文件,若没有创建supervisor.service文件(一般情况下都安装supervisor的时候已经自动创建好了),内容如下,system下的supervisor文件会在开机的时候自动执行,该文件执行时,会调用/etc/supervisor下的supervisord.conf. 7.2设置开机启动 chmod 766 supervisor.service systemctl enable supervisor.service systemctl daemon-reload 关于supervisor的他的一些命令 2)、更新新的配置到supervisord supervisorctl update 3)、重新启动配置中的所有程序 supervisorctl reload 4)、启动某个进程(program_name=你配置中写的程序名称) supervisorctl start program_name 5)、查看正在守候的进程 supervisorctl 6)、停止某一进程 (program_name=你配置中写的程序名称) pervisorctl stop program_name 7)、重启某一进程 (program_name=你配置中写的程序名称) supervisorctl restart program_name 8)、停止全部进程 supervisorctl stop all参考连接:(81条消息) ubuntu中supervisor的安装和学习_sueong的博客-CSDN博客_ubuntu 安装supervisor Subprocesses — Supervisor 4.2.4 documentation (supervisord.org) (82条消息) Ubuntu下Supervisor安装、配置和使用_weixin_34001430的博客-CSDN博客 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |